TypeScriptのModule Resolution Strategy(モジュール解決アルゴリズム)
TypeScriptのModule Resolution Strategy(モジュール解決法アルゴリズム
TypeScript: Documentation - Module Resolution Node
This is really no more complex than what Node.js itself is doing.
TypeScript: Documentation - Module Resolution Node
#モジュールの解決
TypeScript: Documentation - Module Resolution Node
Notice that Node.js jumped up a directory in steps (4) and (7).
(7)じゃなくて(9)...?
module resolution strategy
モジュール解決計画法といったところか
Classic
後方互換性のために残されている。
一番直感的?
tsファイルStart.tsからmoduleBのimportがあったとする。
相対import
Start.ts
import * from "./moduleB"
検索対象: Start.tsから指定した相対位置にあるmoduleB.ts, moduleB.d.tsファイル
https://gyazo.com/0700dcf036c6305896286d389649a3b3
非相対import
import Start.ts from "moduleB"
(package.jsonの存在するフォルダをルートとする絶対importではない!)
Startの位置から上へ上へ辿っていっていって、moduleBを見つける。
ルートまで辿り続ける
https://gyazo.com/7ec881079be2df282ac3ccacba62bf94
Node
Node.jsのシステムを参考にしている。
tsファイルStart.tsからmoduleBのimportがあったとする。
相対import
前項のClassicに加え、tsxファイル, package.jsonの走査も加わる。
指定したmoduleBがフォルダである可能性も考慮して走査する。
その場合は、moduleB内部がnpmプロジェクトであると考慮する。
検索対象
1. moduleB.ts, .tsx, .d.ts
2. moduleBフォルダの中のpackage.json中のtypesで記述されたファイル
3. moduleBフォルダのindex.ts/.tsx/.d.ts
https://gyazo.com/cbb03560a86616011e58dfcce9256e44
非相対import
1. Start.tsの存在するフォルダのnode_modules中のmoduleB.ts, .tsx, .d.ts
2. Start.tsの存在するフォルダの./node_modules/@types/中のmoduleB.d.ts
3. Start.tsの存在するフォルダの./node_modules/moduleB/中のindex.ts, .tsx, .d.ts
4. 以降、これをツリーの祖先側へ一段上げた上で、ルートのnode_modulesにあたるまで繰り返す。
https://gyazo.com/ecaef29d13ae5b5ad55f380aa7dde149
node16/nodenext
package.jsonにおいて、"type": "module"を設定すると
import/export文 / top-level awaitが使用可能。
相対importに拡張子が必要。(.js | .tsx)
非相対importの解決の挙動が少し異なる場合あり。
グローバル値っぽいrequire(), __dirnameなどを直接呼び出せない。
CommonJSモジュールは特定の条件のもとで利用できる。
#WebScrap #Bookmark